import Config  from '../config/config';
import {Message}    from 'element-ui';
import router from "../router";
import axios from 'axios'
import store from '../store'
import qs from 'qs'         //主要用于对 axios 的post 请求方式的参数进行转换，将对象格式转为 字符串 & 联接格式

 // 默认登录的人 去登录【含过期】
 const to_login=()=>{
    localStorage.removeItem('pathObj');
    localStorage.removeItem('showNav');
    localStorage.removeItem('showNavTop');
    localStorage.removeItem('store');
    router.push({ path: '/login' });
}
/**
 * 实例化后，发送网络请求格式：
 * axios({
 *  method: 'post',
 *  url: 'getRegion'
 *  data: {
 *      parent_id: 0 
 * }
 * })
 * 
 * axios.get(url)       //get方式发起请求
 * axios.post(url, {data})      //post 方式发起请求，第二个参数为传参
 * 
 */

export default () => {
    //1、创建 axios 的实例
    const   instance = axios.create({
        baseURL: Config.serverURL,
        timeout: 10000
    })


     instance.defaults.headers['Content-Type'] = 'text/plain'
    //2、请求拦截器
     instance.interceptors.request.use(config => {
        /*
        //如果是post请求方式的会，需要对请求参数做处理，因为 axios 实际需要传的参数是 字符串 & 格式
        if(config.method === 'post'){
            return   config.data = qs.stringify(config.data)
        }
        */
        //这里用可变传参的方式来，
        // Object.keys(config[1]).length > 0   &&  (configp[1] = qs.stringify(config[1]));
        //封装获取token令牌
        //   headers: {
        //     'Content-Type':'application/json;charset=utf8'
        //   },
	     console.log(config.data, ':::::::::::::::::::::config.data');
	     config.data.token = store.state.token;
        return config
    }, err => {
        Message.error(err);
    });

    // return  instance;

    //3、响应拦截器
    instance.interceptors.response.use(res => {
        //处理响应回来的数据，过滤掉 header 等网络信息，只获取后台 api 传回来的data 数据
        let get_data = res.data;
        if(parseInt(get_data.code) == 999){
            // Message.error(get_data.msg);
            to_login();
        }
        if(get_data.code == 'token_missing'){
            // Message.error(get_data.msg);
            to_login();
        }
        return  get_data;
    }, err => {
        Message.error(err);
    })

    //4、发送真正的网络请求
    return  instance;

}
